#include <iostream>

using namespace std;
bool matrix[10][10];
int n,m;
int sum = 0;
int dirx[8] = {2,2,-2,-2,1,1,-1,-1};
int diry[8] = {-1,1,1,-1,2,-2,2,-2};
void dfs(int x,int y,int step) {
    if (step == n*m) {
        sum++;
        return;
    }
    for(int i = 0;i < 8;i++) {
        int newx = x + dirx[i];
        int newy = y + diry[i];
        if (newx>=0&& newx < n && newy >=0 && newy < m && matrix[newx][newy] != true) {
            matrix[newx][newy] = true;
            dfs(newx,newy,step+1);
            matrix[newx][newy] = false;
        }
    }
}

int main() {
    int t,x,y;
    cin >> t;
    for(int i = 0;i < t;i++) {
        cin >> n >> m >> x >> y;
        // 重置信息
        sum = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                matrix[i][j] = false;  // 初始化访问状态
            }
        }

        matrix[x][y] = true;
        dfs(x,y,1);
        cout << sum <<endl;
    }
}